Pulse width modulation (PWM) is a common technique for controlling the amount of power that is delivered to a device, such as a motor or a lamp. One of the main benefits of PWM is that it is a technique that allows a digital system to achieve relatively high resolution control over the operation of a particular device. For example PWM is a technique commonly employed in motor control to allow a digital signal to control the speed of a motor. Specifically, PWM takes advantage of the fact that a motor is an inductive element that acts like an integrator. Accordingly, the application to that motor of a pulsed digital signal results in the motor integrating over the square wave of the pulsed digital signal. By selecting the proper duty cycle and frequency for the PWM signal with respect to the time response of the particular motor under control, the pulsed signal will appear to the motor as a DC signal at a voltage level that is intermediate between the high and low voltage levels of the pulsed digital power signal. Accordingly, pulse width modulation is a technique that allows a digital output signal to effectively achieve control over a device as if the digital output signal could be set to an intermediate voltage level.
Traditional methods of providing pulse width modulated signals include employing data processing systems that have software timers which control the pulse modulation of a particular output. However, although these systems can work quite well, it is often not cost effective to dedicate a data processing platform to the task of running timer modules for a PWM application.
Other techniques include interrupt driven processes in which a microprocessor, such as one having a watchdog timer, receives periodic interrupts at a known rate. Each time through the interrupt loop the processor updates one or more output pins, thus creating a pulse width modulated signal on each output pin. In this case, the rate at which a signal can be modulated is the clock speed multiplied by the number of cycles in the interrupt routine. For interrupt routines that control multiple channels, the number of instructions in the interrupt routine and therefore the number of clock cycles, can be quite large. Thus, the time period for executing the update instructions can be significant, and the PWM signal may have poor resolution, lacking fine grain control over the system. Still other techniques exist which are effectively combinations of the first two processes, software loops that contain a variable number of instructions for these techniques. The processor uses the hardware timer to generate a periodic interrupt, and then, depending on whether the pulse is to be very short or not, either schedules another interrupt to finish the PWM cycle, or creates the pulse by itself in the first interrupt routine by executing a series of instructions consuming a desired amount of time between two PWM signal updates. The difficulty with this method is that for multiple PWM channels it is very difficult to arrange the timer based signal updates such that they do not overlap, and then to accurately change the update times for a new value of PWM signals.
Accordingly, a method is needed to provide multiple PWM channels without the problems of these traditional methods. Moreover, there is a need to provide a PWM technique that provides fine resolution over multiple channels, and be executed on an inexpensive micro controller or microprocessor platform.